package com.oa.email.receiver;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import javax.activation.DataSource;
import javax.mail.Address;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Store;
import javax.mail.internet.MimeMessage;
import org.apache.commons.mail.util.MimeMessageParser;
/**
* 邮件解析类
*
* @author athena
*
*/
public class MessageParser {
/**
* 邮件附件存放位置
*/
private static final String folder = "c:\\upload";
private static void parse(Message message) {
try {
MimeMessageParser parser = new MimeMessageParser((MimeMessage) message).parse();
String from = parser.getFrom(); // 获取发件人地址
List<Address> cc = parser.getCc();// 获取抄送人地址
List<Address> to = parser.getTo(); // 获取收件人地址
String replyTo = parser.getReplyTo();// 获取回复邮件时的收件人
String subject = parser.getSubject(); // 获取邮件主题
String htmlContent = parser.getHtmlContent(); // 获取Html内容
String plainContent = parser.getPlainContent(); // 获取纯文本邮件内容(注:有些邮件不支持html)
System.out.println(subject);
List<DataSource> attachments = parser.getAttachmentList(); // 获取附件,并写入磁盘
for (DataSource ds : attachments) {
BufferedOutputStream outStream = null;
BufferedInputStream ins = null;
try {
String fileName = folder + File.separator + ds.getName();
outStream = new BufferedOutputStream(new FileOutputStream(fileName));
ins = new BufferedInputStream(ds.getInputStream());
byte[] data = new byte[2048];
int length = -1;
while ((length = ins.read(data)) != -1) {
outStream.write(data, 0, length);
}
outStream.flush();
System.out.println("附件:" + fileName);
} finally {
if (ins != null) {
ins.close();
}
if (outStream != null) {
outStream.close();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void parse(Message... messages) {
if (messages == null || messages.length == 0) {
System.out.println("没有任何邮件");
} else {
for (Message m : messages) {
parse(m);
}
// 最后关闭连接
if (messages[0] != null) {
Folder folder = messages[0].getFolder();
if (folder != null) {
try {
Store store = folder.getStore();
folder.close(false);// 参数false表示对邮件的修改不传送到服务器上
if (store != null) {
store.close();
}
} catch (MessagingException e) {
// ignore
}
}
}
}
}
}